<?php if (!defined('BASEPATH')) exit ('No direct script access allowed');

include_once('ExceptionDAO.php');
include_once('ExceptionPermissao.php');
include_once 'util/MapError.php';
include_once 'TOConfig.php';

/**
 * DAO para operações de banco para Config
 * @author Douglas Rafael
 *
 */
class DAOConfig extends CI_Model {

    
    /**
     * Retorna as configurações gerais do sistema
     * 
     * @return TOConfig      Objeto contendo os dados
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function get_config() {
        try {
            $result = $this->db->get('config');

            //Caso ocorra erro no select
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar listar as configurações do sistema.');
            } else {
                $value = $result->row();
                $config = new TOConfig();
                $config->id = $value->id;
                $config->nome_instituicao = $value->nome_instituicao;
                $config->endereco = $value->endereco;
                $config->telefone = $value->telefone;
                $config->email = $value->email;
                $config->tema = $value->tema;
                $config->limit_emprestimo = $value->limit_emprestimo;
                $config->limit_item_emprestimo = $value->limit_item_emprestimo;
                $config->auto_multa = $value->auto_multa;
                $config->periodo_multa = $value->periodo_multa;
                $config->valor_multa = $value->valor_multa;
                $config->alerta_multa = $value->alerta_multa;
                $config->modulo_email_status = $value->modulo_email_status;
                $config->smtp_host = $value->smtp_host;
                $config->smtp_port = $value->smtp_port;
                $config->smtp_user = $value->smtp_user;
                $config->smtp_pass = $value->smtp_pass;
                $config->timezone = $value->timezone;
                $config->data_implantacao = $value->data_implantacao;

                return $config;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    
    /**
     * Atualiza as configurações do sistema
     * 
     * @param TOConfig $config  Objeto contendo os dados a ser atualizados
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function update_config(TOConfig $config) {
        try {
            $this->db->where('id', $config->id);
            $result = $this->db->update('config', $config);
            
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar atualizar as configurações do sistema.');
            }
        } catch (ExceptionDAO $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    
    /**
     * Retorna o tempo do sistema de acordo com a data em que o sistema foi ativado e a data atual
     */
    public function get_temp_system(){
        $this->load->helper('string_util');
        $config = $this->get_config();
        return diff_date($config->data_implantacao, date('Y-m-d'));
    }

}